package cron

import (
	"clouds.lgb24kcs.cn/global"
	"clouds.lgb24kcs.cn/models"
	"clouds.lgb24kcs.cn/utils/oss"
	"fmt"
	"github.com/robfig/cron/v3"
)

/*
每个2个小时去校验一次数据一致性
传参：
	oss存储对象的秘钥
	数据库的bucket---catalogue---file
    通过数据库的数据去调用oss包中的检查方法进行判断，如果oss存储中不存在则进行删除
	BucketExists()
	CatalogueExists()
	ObjectExists()
*/

func sqlStorage() ([]models.Storage, error) {
	storageLists := []models.Storage{}
	//tx := global.APP.DB.Select("DISTINCT accesskey,secretkey,zone").Find(&storageLists)	/*去重查询*/
	tx := global.APP.DB.Find(&storageLists)
	if tx.Error != nil {
		global.APP.Log.Error(tx.Error.Error())
		fmt.Println("数据库去重查询语句错误：", tx.Error)
		return nil, tx.Error
	} else {
		return storageLists, nil
	}

}

func sqlCatalogue() ([]models.Catalogue, error) {
	catalogueLists := []models.Catalogue{}
	tx := global.APP.DB.Find(&catalogueLists)
	if tx.Error != nil {
		global.APP.Log.Error(tx.Error.Error())
		fmt.Println("数据库去重查询语句错误：", tx.Error)
		return nil, tx.Error
	} else {
		return catalogueLists, nil
	}
}

func sqlFiles() ([]models.Files, error) {
	fileLists := []models.Files{}
	tx := global.APP.DB.Find(&fileLists)
	if tx.Error != nil {
		global.APP.Log.Error(tx.Error.Error())
		fmt.Println("数据库去重查询语句错误：", tx.Error)
		return nil, tx.Error
	} else {
		return fileLists, nil
	}
}

func CronCheckStorage() {
	api := oss.OSS{}
	c := cron.New()
	_, err := c.AddFunc("@every 6s", func() { // 测试语句，记得注释掉
		//_, err := c.AddFunc("@every 10m", func() {
		storages, err := sqlStorage()
		if err != nil {
			// 不存在就需要删除数据库中的记录

			global.APP.Log.Error(err.Error())

		} else {
			for _, item := range storages {
				client := api.NewClient(item.Accesskey, item.Secretkey, item.Zone)
				err := api.BucketExists(client, item.Bucketname)
				if err != nil {
					// 不存在就需要删除数据库中的记录

					fmt.Println("定时任务检查，bucket不存在", err.Error())
				} else {
					// 存在就查询catalogu
					catalogue, err := sqlCatalogue()
					if err != nil {
						// 不存在就需要删除数据库中的记录
						fmt.Println("定时任务检查，catalogue不存在", err.Error())

					} else {
						// 存在，查询files表数据
						files, err := sqlFiles()
						if err != nil {
							// 不存在就需要删除数据库中的记录
							fmt.Println("定时任务检查，catalogue不存在", err.Error())

						} else {
							fmt.Println(files)
						}
					}
				}
				//BucketExists

			}
		}

	})
	if err != nil {
		fmt.Println("定时任务错误：", err)
	}
	c.Start()
	//time.Sleep(time.Second * 5)

}
